unit u_jresau;

interface

type

  r_player = record
    x, y, z : integer;
    name : string;
  end;

  t_player = Array of r_player;

  c_res_joueur = class
    private
      joueur_tab : t_player;
    public
      procedure renvoi_tab_coord(var t_tab : t_player);
      procedure get_all_info(var inf : t_player);
      procedure change_pos(last_x, last_y, last_z, new_x, new_y, new_z : integer);
      procedure add_player(n_x, n_y, n_z : integer; name : string);
      procedure del_player_pos(pos_x, pos_y, pos_z : integer);
      procedure del_player_name(name_ : string);
      constructor create;
  end;

implementation

uses
  u_engine;

  constructor c_res_joueur.create;
    begin
      inherited create;
      SetLength(joueur_tab, 0);
    end;

  procedure c_res_joueur.change_pos(last_x, last_y, last_z, new_x, new_y, new_z : integer);
  var
    i : integer;
    begin
      if not ((new_x = myplayer.get_x) and (new_y = myplayer.get_y)) then
        begin
          i := 0;
          if Length(joueur_tab) <> 0 then
            while (i < Length(joueur_tab)) and
            not((joueur_tab[i].x = last_x) and (joueur_tab[i].y = last_y) and (joueur_tab[i].z = last_z)) do
              i := i + 1;
            if i <> Length(joueur_tab) then
              begin
                joueur_tab[i].x := new_x;
                joueur_tab[i].y := new_y;
                joueur_tab[i].z := new_z;
              end;
        end;
    end;

  procedure c_res_joueur.add_player(n_x, n_y, n_z : Integer; name : string);
  var
    i : integer;
    begin
      if name <> myplayer.pseudo_ then
        begin
          i := Length(joueur_tab);
          SetLength(joueur_tab, i + 1);
          joueur_tab[i].x := n_x;
          joueur_tab[i].y := n_y;
          joueur_tab[i].z := n_z;
          joueur_tab[i].name := name;
        end;
    end;

  procedure c_res_joueur.del_player_pos(pos_x, pos_y, pos_z : Integer);
  var
    i, j, len : integer;
    begin
      i := 0;
      while (i < Length(joueur_tab)) and
      not((joueur_tab[i].x = pos_x) and (joueur_tab[i].y = pos_y) and (joueur_tab[i].z = pos_z)) do
        i := i + 1;
      if Length(joueur_tab) <> i then
        begin
          for j := i to Length(joueur_tab) - 2 do
            joueur_tab[j] := joueur_tab[j + 1];
          SetLength(joueur_tab, length(joueur_tab) - 1);
        end;
    end;

  procedure c_res_joueur.del_player_name(name_: string);
  var
    i, j : integer;
    begin
      i := 0;
      while (i < Length(joueur_tab)) and (joueur_tab[i].name <> name_) do
        i := i + 1;
      if i <> Length(joueur_tab) then
        begin
          for j := i to Length(joueur_tab) - 2 do
            joueur_tab[j] := joueur_tab[j + 1];
          SetLength(joueur_tab, length(joueur_tab) - 1);
        end;
    end;

  procedure c_res_joueur.get_all_info(var inf : t_player);
    begin
      inf := joueur_tab;
    end;

  procedure c_res_joueur.renvoi_tab_coord(var t_tab: t_player);
  begin
    t_tab := joueur_tab;
    SetLength(t_tab, length(t_tab) + 1);
    t_tab[High(t_tab)].x := myplayer.get_x;
    t_tab[High(t_tab)].y := myplayer.get_y;
  end;


end.

